﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BE;
using BLL;
using VentaPorCatalogos.UserControls;
using BE.SearchCriteria;
using BLL.Exceptions;

namespace VentaPorCatalogos.Pages
{
    public partial class Calles  : VentaPorCatalogos.Page
    {
        #region "Events"
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState.Add("FormBehavior", behavior.Initial);
                Session["SearchCriteria"] = null;
                Session["Model"] = null;
            }
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            ConfigurarFormBehaviour();
        }


        #endregion


        #region "Buttons"

        protected void botComandos_OnBotonClick(object sender, BotoneraEventArgs e)
        {
            try
            {
                CalleBE oCalleBE = new CalleBE();
                behavior wComportamiento;

                switch (e.Boton)
                {
                    case BotonesTipos.Buscar:
                        if (BuscarElemento())
                            SetFormBehaviour(behavior.View);
                        else
                            e.CancelarOperacion = true;  // Evita que la botonera pase a modo consulta, si no se encontró un elemento.                        
                        break;

                    case BotonesTipos.Nuevo:
                        SetFormBehaviour(behavior.New);
                        HabilitarControles(true);
                        BlanquearControles(divCampos.Controls);
                        break;

                    case BotonesTipos.Editar:
                        SetFormBehaviour(behavior.Edit);
                        HabilitarControles(true);
                        break;

                    case BotonesTipos.Eliminar:
                        CalleBLL.Eliminar(GetModel<CalleBE>());
                        SetModel<CalleBE>(null);
                        SetFormBehaviour(behavior.Initial);
                        BlanquearControles(divCampos.Controls);
                        break;

                    case BotonesTipos.Aceptar:
                        wComportamiento = (behavior)ViewState["FormBehavior"];
                        LeerDatosDesdeControles(oCalleBE);
                        switch (wComportamiento)
                        {
                            case behavior.New:
                                CalleBLL.InsertarCalle(oCalleBE);
                                hidIdElemento.Value = oCalleBE.IdCalle.ToString();
                                BuscarElemento();
                                MostrarMensaje("Calle registrada correctamente");
                                break;
                            case behavior.Edit:
                                oCalleBE.IdCalle = Convert.ToInt32(lblIdCalle.Text);
                                CalleBLL.Modificar(oCalleBE);
                                MostrarMensaje("Calle modificada correctamente");
                                break;
                        }
                        SetFormBehaviour(behavior.View);

                        break;
                    case BotonesTipos.Cancelar:
                        SetFormBehaviour(behavior.Initial);
                        break;
                    default:
                        break;
                }
            }
            catch (BLLException bllEx)
            {
                MostrarMensaje(bllEx.Message);
            }
            catch (Exception)
            {
                MostrarMensaje("Se ha producido un inconveniente procesando la operación. Por favor intente nuevamente.");
            }
        }

        #endregion

        #region "Methods"

        private void ConfigurarFormBehaviour()
        {
            behavior wComportamiento;
            wComportamiento = GetFormBehaviour();
            switch (wComportamiento)
            {
                case behavior.Initial:
                    HabilitarControles(false);
                    break;

                case behavior.New:
                    HabilitarControles(true);
                    BlanquearControles(divCampos.Controls);
                    break;

                case behavior.Edit:
                    HabilitarControles(true);
                    break;

                case behavior.View:
                    HabilitarControles(false);
                    break;
            }
        }

        private bool BuscarElemento()
        {
            try
            {
                int id = Convert.ToInt32(hidIdElemento.Value);

                CalleBE oCalleBE = new CalleBE();
                oCalleBE.IdCalle = id;

                oCalleBE = CalleBLL.SeleccionarPorId(oCalleBE);
                SetModel<CalleBE>(oCalleBE);

                txtDescripcion.Text = oCalleBE.Descripcion;
                lblIdCalle.Text = oCalleBE.IdCalle.ToString();

                return true;
            }
            catch (Exception)
            { }
            return false;
        }

        private void LeerDatosDesdeControles(CalleBE pCalleBE)
        {
            pCalleBE.Descripcion = txtDescripcion.Text;
        }

        #endregion
    }
}